﻿package net.wangit.jdbc;

import java.io.Serializable;
import java.sql.Connection;
import java.sql.ResultSet;
import java.util.List;

import net.wangit.MapList;


/**
 * 数据库访问对象。
 * 
 * @author watson Feb 12, 2010
 */
public interface DB extends Serializable {
	// 开始事务，在DefaultAction或TransactionAction中系统会自动处理事务。
	public abstract Transaction beginTransaction() throws JDBCException;

	// 关闭连接，使用DBFactory.getDB()或 DBFactory.getDB(String)获取的DB系统会自动关闭连接，
	// 使用 DBFactory.newDB()或DBFactory.newDB(String)获取的DB需要手动关闭连接。
	public abstract void close() throws JDBCException;

	// 执行SQL语句。
	public abstract int execute(String sql) throws JDBCException;

	// 执行SQL语句，value将会绑定到SQL语句中的一个'?'
	public abstract int execute(String sql, String value, int type)
			throws JDBCException;

	// 执行SQL语句，values中的值将会按顺序绑定到SQL语句中的多个'?'
	public abstract int execute(String sql, String[] values, int[] types)
			throws JDBCException;

	// 执行批量SQL语句，依次使用valuesList中的值数组来绑定到SQL语句中的多个'?'
	public abstract void executeBatch(String sql, List<String[]> valuesList,
			int[] types) throws JDBCException;

	// 取得数据库连接。
	public abstract Connection getConnection() throws JDBCException;

	// 执行查询，返回ResultSet对象。
	public abstract ResultSet getResultSet(String sql) throws JDBCException;

	// 执行查询，返回ResultSet对象。
	public abstract ResultSet getResultSet(String sql,
			QueryParameters queryParameters) throws JDBCException;

	// 执行查询，返回ResultSet对象。
	public abstract ResultSet getResultSet(String sql, String value, int type)
			throws JDBCException;

	// 执行查询，返回ResultSet对象。
	public abstract ResultSet getResultSet(String sql, String[] values,
			int[] types) throws JDBCException;

	// 执行查询，查询结果MapList中的字段名称全部为小写。
	public abstract MapList query(String sql) throws JDBCException;

	// 执行查询，查询结果MapList中的字段名称全部为小写。
	public abstract MapList query(String sql, QueryParameters queryParameters)
			throws JDBCException;

	// 执行查询，查询结果MapList中的字段名称全部为小写。
	public abstract MapList query(String sql, String value, int type)
			throws JDBCException;

	// 执行查询，查询结果MapList中的字段名称全部为小写。
	public abstract MapList query(String sql, String[] values, int[] types)
			throws JDBCException;

	// 保存多个表，依据表组件的配置来执行操作，Table对象中可以同时包含新增行、修改行、删除行。
	public abstract int[] save(List<Table> list) throws JDBCException;

	// 保存表，依据表组件的配置来执行操作，Table对象中可以同时包含新增行、修改行、删除行。
	public abstract int[] save(Table table) throws JDBCException;
}
